package cadastrocliente.negocio;

import java.util.List;

import cadastrocliente.dominio.Cliente;
import cadastrocliente.dominio.ClienteHistorico;
import cadastrocliente.negocio.exceptions.*;
import cadastrocliente.dao.*;

public class ControladorCliente {
	
	private IClienteDao clienteDao = new ClienteDao();
	private IClienteHistoricoDao clienteHistoricoDao = new ClienteHistoricoDao();
	
	public void inserirOuAtualizarCliente(Cliente cliente) throws CampoObrigatorio {
		
		if (cliente.getCpf() == null || cliente.getNome() == null || cliente.getTelefone() == null) {
			throw new CampoObrigatorio("Campo obrigatório não informado");
		}
		
		if (clienteDao.verificarExistenciaCliente(cliente.getCpf())) {
			clienteDao.atualizarCliente(cliente);
		}
		else {
			clienteDao.inserirCliente(cliente);
		}
		
		ClienteHistorico clienteHistorico = new ClienteHistorico(cliente);
		clienteHistoricoDao.inserirClienteHistorico(clienteHistorico);
	}
	
	public void excluirCliente(String cpf) throws CampoObrigatorio, ClienteNaoExite {
		
		if (cpf == null) {
			throw new CampoObrigatorio("Campo obrigatório não informado");
		}
		
		if (clienteDao.verificarExistenciaCliente(cpf)) {
			
			clienteDao.excluirCliente(cpf);
			
			ClienteHistorico clienteHistorico = new ClienteHistorico(clienteDao.retornarCliente(cpf));
			clienteHistoricoDao.inserirClienteHistorico(clienteHistorico);
			
		}
		else {
			throw new ClienteNaoExite("Cliente não Existe");
		}
	}
	
	public List<ClienteHistorico> listarHistoricoCliente(String cpf) throws CampoObrigatorio, ClienteNaoExite {
		
		if (cpf == null) {
			throw new CampoObrigatorio("Campo obrigatório não informado");
		}
		
		if (clienteDao.verificarExistenciaCliente(cpf)) {
			
			return clienteHistoricoDao.listarHistoricoCliente(cpf);
			
		}
		else {
			throw new ClienteNaoExite("Cliente não Existe");
		}
	}
}
